/*
 * 策略模式就是用统一的方法接口分别对不同类型的数据进行访问。
 *
 * 比如说，现在我们想用pc看一部电影，此时应该怎么做呢？
 *
 * 看电影嘛，当然需要各种播放电影的方法。
 *
 * rmvb要rmvb格式的方法，avi要avi的方法,mpeg要mpeg的方法。
 *
 * 可是事实上，我们完全可以不去管是什么文件格式。
 *
 * 因为播放器对所有的操作进行了抽象，不同的文件会自动调用相应的访问方法。
 */

typedef struct movie_play
{
	struct comm_movie_play * pcomm_movie_play;
}movie_play;

typedef struct comm_movie_play
{
	HANDLE h_file;
	void (*play)(HANDLE h_file);
}comm_movie_play;


/* 
 * 这个时候呢，对于用户来说，统一的文件接口就是MoviePlay。接下来的一个工作，就是编写一个统一的访问接口
 */
void play_movie_file(struct movie_play * pmovie_play)
{
	comm_movie_play * pcomm_movie_play;
	assert(NULL != pmoive_play);

	pcomm_movie_play = pmovie_play->pcomm_movie_play;
	pcomm_movie_play->play(pcomm_movie_play->h_file);
}

/*
 *  最后的工作就是对不同的hFile进行play的实际操作，写简单一点就是， 
 */
void play_avi_file(HANDLE h_file)
{
	printf("play avi file!\n");
}

void play_rmvb_file(HANDLE h_file)
{
	printf("play rmvb file!\n");
}

void play_mpeg_file(HANDLE h_file)
{
	printf("play mpeg file!\n");
}
